#pragma once

#include <opencv2/opencv.hpp>
#include <vector>
#include <memory>

struct ProcessingResult {
    cv::Mat processed_frame;
    int contours_count;
    std::vector<cv::Point3f> point_cloud;  // 3D点云数据
    cv::Mat depth_map;                     // 深度图
    double processing_time_ms;             // 处理时间
};

class FrameProcessor {
public:
    FrameProcessor();
    ~FrameProcessor() = default;

    // 主要处理函数
    ProcessingResult process_frame(const cv::Mat& input_frame);
    
    // 三维重建相关函数
    std::vector<cv::Point3f> extract_3d_points(const cv::Mat& frame);
    cv::Mat estimate_depth(const cv::Mat& frame);
    cv::Mat detect_features(const cv::Mat& frame);
    
    // 性能优化
    void set_processing_mode(bool enable_gpu);
    void set_resolution(int width, int height);

private:
    // 图像预处理
    cv::Mat preprocess_frame(const cv::Mat& frame);
    cv::Mat enhance_contrast(const cv::Mat& frame);
    
    // 特征检测和匹配
    std::vector<cv::KeyPoint> detect_keypoints(const cv::Mat& frame);
    cv::Mat compute_descriptors(const cv::Mat& frame, const std::vector<cv::KeyPoint>& keypoints);
    
    // 三维重建算法
    cv::Mat stereo_reconstruction(const cv::Mat& left_frame, const cv::Mat& right_frame);
    cv::Mat structure_from_motion(const std::vector<cv::Mat>& frames);
    
    // 配置参数
    bool use_gpu_;
    cv::Size target_resolution_;
    
    // OpenCV 算法对象
    cv::Ptr<cv::Feature2D> feature_detector_;
    cv::Ptr<cv::Feature2D> descriptor_extractor_;
    cv::Ptr<cv::StereoSGBM> stereo_matcher_;
}; 